package com.project.Util;

import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Field;
import java.time.LocalDate;
import java.util.Enumeration;

/**
 * @author lyl
 * description:填充实体类工具
 */
public class FullBean {
    /**
     * 封装实体bean
     *
     * @param bean
     */
    public static void fullEmpBean(Object bean, HttpServletRequest req) {
        //获取类模板
        Class beanClass = bean.getClass();
        //获取url中传输的相关bean参数，得到一个枚举类型集合
        Enumeration<String> em = req.getParameterNames();
        //对此枚举类型进行遍历
        while (em.hasMoreElements()) {
            //获取枚举元素名，实际为传入url中键值对的键
            String str = em.nextElement();
            //通过键获取对应值
            Object value = req.getParameter(str);
            try {
                //获取属性对象
                Field f = beanClass.getDeclaredField(str);
                f.setAccessible(true);
                //判断类型，如果是以下三种类型类型便进行转换处理
                if (f.getType() == int.class || f.getType() == Integer.class) {
                    value = Integer.parseInt((String) value);
                } else if (f.getType() == double.class || f.getType() == Double.class) {
                    value = Double.parseDouble((String) value);
                } else if (f.getType() == LocalDate.class) {
                    value = LocalDate.parse((CharSequence) value);
                }
                //如果为数组类型则直接使用getParameterValues方法进行取出并赋值，其余的通过转换后进行赋值
                if (f.getType() == String[].class) {
                    f.set(bean, req.getParameterValues(str));
                } else {
                    f.set(bean, value);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
